from django.core.files.storage import Storage, FileSystemStorage
from fdfs_client.client import Fdfs_client
from django.conf import settings


class FDFSStorage(Storage):
    """FDFS文件存储类"""

    def _save(self, name, content):
        """
        name:上传文件的名称 1、jpg
        content: 保存上传的文件内容的File对象  可以通过content.read()获取上传文件的内容
        """
        # Fdfs_client('<客户端配置文件路径>')  创建对象
        client = Fdfs_client(settings.FDFS_CLIENT_CONF)

        # 上传文件到FDFS文件系统
        res = client.upload_by_buffer(content.read())

        if res.get('Status') != 'Upload successed.':
            # 上传文件失败
            raise Exception('上传文件失败')

        # 上传完文件，将文件id存入，便于以后查看图片，获取file_id
        file_id = res.get('Remote file_id')

        return file_id

    def exists(self, name):
        """判断上传文件与原有的系统文件是否冲突"""
        return False

    def url(self, name):
        """
        返回访问可访问到的文件存储系统中文件的完整url路径
        name 表中image字段存储的内容
        """
        return settings.FDFS_URL + name
